class CarritoController < ApplicationController
  before_filter :cargar_pedido
  before_filter :cargar_libro, :only => [:anadir, :quitar, :actualizar_linea]
  
  def ver
    @pedido = Pedido.find_by_id( session[ :pedido_id ] )
    if @pedido.esta_vacio?
      redirect_to carrito_vacio_url
    end
  end
  
  def anadir
    if @pedido.tiene_libro?( @libro.id )
      flash[ :info ] = "El libro ya está en al carrito, si quieres modificar la cantidad aquí puedes hacerlo."
    else
      @pedido.anadir_linea( @libro.id )
      @pedido.save  # TODO: no se save lo que busco sino refresh o algo así porque lo que se guarda es la PedidoLinea

      flash[ :info ] = "Libro añadido al carrito"
    end
    
    redirect_to carrito_ver_url
  end
  
  def quitar
    if not @pedido.tiene_libro?( @libro.id )
      flash[ :error ] = "El libro no está en al carrito."
    else
      @pedido.quitar_linea( @libro.id )
      @pedido.save  # TODO: no se save lo que busco sino refresh o algo así porque lo que se guarda es la PedidoLinea

      flash[ :info ] = "Libro quitado del carrito."
    end
    
    redirect_to carrito_ver_url
  end
  
  def actualizar_linea
    if not @pedido.tiene_libro?( @libro.id )
      flash[ :error ] = "El libro no está en al carrito."
    else
      cantidad = params[ :linea ][ :cantidad ]
      pedido_linea = @pedido.linea_que_tiene_el_libro( @libro.id )
      pedido_linea.cantidad = cantidad
      pedido_linea.save
      @pedido.save # TODO: no save sino refresh
  
      flash[ :info ] = "Se ha actualizado la cantidad del libro '#{@libro.titulo}'."
    end
    
    redirect_to carrito_ver_url
  end
  
  def vaciar
    @pedido.destroy unless @pedido.nil?
    session[ :pedido_id ] = nil
    flash[ :info ] = "Carrito vaciado.. ahora hay que volver a llenarlo :)"
    
    redirect_to carrito_ver_url
  end
  
  def resumen
    @pedido.update_attributes( params[:pedido] )
    @pedido.save
    
    errores = @pedido.comprobar_datos_usuario
    
    if not errores.empty?
      flash[ :errores ] = errores
      redirect_to carrito_ver_url
    end
  end
  
  def confirmar
    
    errores = @pedido.comprobar_datos_usuario
    
    if not errores.empty?
      flash[ :errores ] = errores
      redirect_to carrito_ver_url
    else
      @pedido.estado = Pedido::NUEVO
      @pedido.save
    
      Cartero.deliver_notificacion_de_pedido_al_usuario( @pedido )
      Cartero.deliver_notificacion_de_pedido_al_administrador( @pedido )
    
      session[ :pedido_id ] = nil
      redirect_to carrito_gracias_url
    end
  end
  
  def actualizar_transporte
    @transporte = Transporte.find_by_id( params[ :pedido ][ 'transporte_id' ], :conditions => "estado = '#{Transporte::ACTIVO}'" )
    
    if not @transporte
      flash[:error] = "El transporte seleccionado no es válido, selecciona otro."
    else
      @pedido.actualizar_transporte( @transporte.id )
      @pedido.save
    
      flash[ :info ] = "Se ha actualizado el tipo de transporte."
    end
    
    redirect_to carrito_ver_url
  end
  
  protected
    def cargar_pedido
      @pedido = Pedido.find_by_id( session[ :pedido_id ] )
    end
    
    def cargar_libro
      if es_admin?
        @libro = Libro.find_by_titulo_sanitizado( params[:titulo_sanitizado] )
      else
        @libro = Libro.find_by_titulo_sanitizado( params[:titulo_sanitizado], :conditions => "estado != '#{Libro::BORRADO}'" )
      end
      
      if not @libro
        render_404
      end
    end
    
    def menu_activado
      @menu_activado = 'carrito'
    end
end